package main

import (
	"fmt"
	"time"
)

//在编程中，程序员会经常使用到日期相关的函数
//时间和日期相关函数，需要导入time包
//time.Time类型，用于表示时间
func main() {
	//1获取当前时间
	now := time.Now()
	fmt.Printf("type=%T val=%v", now, now)

	//2如果获取其他日期信息,年月日，时分秒
	fmt.Printf("年=%v\n", now.Year())
	fmt.Printf("月=%v\n", now.Month())
	fmt.Printf("日=%v\n", now.Day())
	fmt.Printf("时=%v\n", now.Hour())
	fmt.Printf("分=%v\n", now.Minute())
	fmt.Printf("秒=%v\n", now.Second())

	//3格式化日期时间
	//方式1
	fmt.Printf("当前年月日 %d-%d-%d %d:%d:%d\n", now.Year(),
		now.Month(), now.Day(), now.Hour(), now.Minute(), now.Second())
	dateStr := fmt.Sprintf("当前年月日 %d-%d-%d %d:%d:%d\n", now.Year(),
		now.Month(), now.Day(), now.Hour(), now.Minute(), now.Second())
	fmt.Printf("dateStr=%v\n", dateStr)
	//方式2
	//"2006/01/02 15:04:05"这个字符串的各个数字是固定的，必须是这样写
	//"2006/01/02 15:04:05"这个字符串各个数字可以自由的组合这样可以按程序需求来返回时间和日期
	fmt.Printf(now.Format("2006/01/02 15:04:05")) //获得年月日时分秒
	fmt.Println()
	fmt.Printf(now.Format("2006-01-02")) //获得年月日
	fmt.Println()
	fmt.Printf(now.Format("15:04:05")) //获得时分秒
	fmt.Println()
	fmt.Printf(now.Format("01")) //获得月

	/*
		4时间的常量
		const(
			Nanosecond Duration=1//纳秒
			Microsecond =1000*Nanosecond//微妙
			Millisecond =1000*Microsecond//毫秒
			Second =1000*Millisecond//秒
			Minute =60*Seconde//分钟
			Hour =60*Minute//小时
		)
		常量的作用：在程序中可用于获取指定时间单位的时间，比如想得到100毫秒 100*time.Millisecond
	*/
	//5休眠 time.Sleep(100*time.Millisecond)//休眠100毫秒
	//func Sleep(d Duration)
	//每隔0.1秒打印一个数字，打印到100时就退出
	i := 0
	for {
		i++
		fmt.Println(i)
		//休眠
		time.Sleep(time.Millisecond * 100)
		if i == 100 {
			break
		}
	}

	//6Unix和UnixNano的使用，返回到当前时间的毫秒数
	fmt.Printf("unix时间戳=%v unixnano时间戳=%v\n", now.Unix(), now.UnixNano())
}
